<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// - 原型链继承
	// - 缺点：父类当中提供的属性方法全部都来原型链。这些数据和方法对于实例而言是共享的。容易造成数据的混乱。
	{
		// function Box(){
		// 	this.userName = "zhangsan";
		// }
		// Box.prototype.fn = function(){
		// 	console.log("fn")
		// }
		// function Desk(){
		// 	this.age = 12;
		// }
		// Desk.prototype = new Box();
		// Desk.prototype.constructor = Desk;
		// const obj = new Desk();
		// // console.log(obj.userName,obj.age);
		// // obj.fn();
		// console.log(obj.constructor === Desk);
		
	}
	
	
	
	
	// - 冒充继承：借用构造函数继承:只能够继承父类当中的实例，不会继承原型。
	//   - 缺点：无法继承父类的原型对象的。
	// {
	// 	function Box(name){
	// 		this.userName = name;
	// 	}
	// 	Box.prototype.fn = function(){
	// 		console.log("fn")
	// 	}
	// 	function Desk(name){
	// 		this.age = 12;
	// 		Box.call(this,name);
	// 	}
	//
	// 	const obj = new Desk("lisi");
	// 	console.log(obj.fn);
	// }
	
	
	
	// - 原型链+借用构造函数的组合继承
	{
		function Box(name) {
			this.userName = name;
		}
		
		Box.prototype.fn = function () {
			console.log("fn")
		}
		
		function Desk(name) {
			this.age = 12;
			Box.call(this, name);
		}
		Desk.prototype = Box.prototype;
		Desk.prototype.constructor = Desk;
		const obj = new Desk("wangwu");
		console.log(obj);
	}
</script>
</html>